﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using METODESA.Server.Data.Exceptions;
using METODESA.Server.Data.METODESA.Entity;
using METODESA.Server.Data.METODESA.Factorys;
using METODESA.Server.Data.METODESA.Nhibernate;
using System.Security.Cryptography;
using NHibernate;

namespace Metodesa.Logic
{
    public class ReparacionLogic
    {

        public static IList<Servicio> processSearch(string search, string criteria)
        {
            if (criteria == "" || search == "")
            {
                return ReparacionDao.getAllReparaciones();
            }
            else
            {

                switch (criteria)
                {
                    case "Codigo": return ReparacionDao.getReparacionByCode(int.Parse(search));

                    case "Fecha_Ini": return ReparacionDao.getReparacionesByDate(search);

                }

            }

            return null;
        }


        public static int add(string fecha_ini, string fecha_fin, double precio, string descripcion)
        {
            try
            {
                Servicio reparacion = FactoryReparacion.getReparacion(fecha_ini, fecha_fin, precio, descripcion);
                ReparacionDao.saveEntity(reparacion);
            }
            catch (HibernateException e){
                NHibernateHelper.GetCurrentSession().Clear(); // Quitamos el query que nos dio error
                throw new EntityCouldntBeSaved("La reparacion no se ha podido guardar " + e.Message);
            }
            return 0;
        }

        public static int update(int id, string fecha_ini, string fecha_fin, double precio, string descripcion)
        {
            try
            {
                Servicio reparacion = ReparacionDao.getReparacionesByCode_individual(id);
                reparacion.FechaInicio = fecha_ini;
                reparacion.FechaFin = fecha_fin;
                reparacion.Precio = precio;
                reparacion.Descripcion = descripcion;
                ReparacionDao.updateEntity(reparacion);
            }
            catch (HibernateException e)
            {
                NHibernateHelper.GetCurrentSession().Clear(); // Quitamos el query que nos dio error
                throw new EntityCouldntBeUpdated("La reparacion no se ha podido modificar " + e.Message);
            }
            return 0;
        }

        public static int delete(int id)
        {
            try
            {
                Servicio reparacion = ReparacionDao.getReparacionesByCode_individual(id);
                
                if (reparacion.Borrable == 1)
                {
                    ReparacionDao.deleteEntity(reparacion);
                }
                else
                {
                    NHibernateHelper.GetCurrentSession().Clear(); // Quitamos el query que nos dio error
                    throw new EntityCouldntBeDeleted
                        ("La reparacion no se ha podido modificar por que tiene una venta asociada" );

                }
            }
            catch (HibernateException e)
            {   
                NHibernateHelper.GetCurrentSession().Clear(); // Quitamos el query que nos dio error
                throw new HibernateException
                    ("La reparacion no se ha podido modificar " + e.Message);
            }
            return 0;
        }
    }
}

